package isanfeng.tuxiaoer.pattern.creational.Dbuilder;

/**
 * 建造者模式
 * 定义：
 *      将一个复杂对象的构建与它得分表示分离，使得同样的构建过程，可以创建不同的表示。
 * 解释：用户只需要指定需要建造的类型就可以得到它们，建造过程及细节不需要知道
 * 适用场景：
 *      如果一个对象有非常复杂的内部结构（很多属性）【做一盘菜】
 *      想把复杂的对象的创建和使用分离
 * 优点：
 *      封装性好，创建和使用分离
 *      扩展性好、建造类之间独立，一定程度上解耦
 * 缺点：
 *      产生多余的Builder对象
 *      产品内部发生变化，建造者都要修改，成本较大
 * @author 李红辉
 * @version 1.0
 * @date 2019/10/5 10:41
 */
public class Test {
    public static void main(String[] args) {
        CourseBuilder courseBuilder = new CourseBuilderImpl();
        Coach coach = new Coach();
        coach.setCourseBuilder(courseBuilder);

        Course course = coach.makeCourse("javaName", "baiduPPT", "http://xxx.com/yyVideo", "xxxArticle", "yyyQA");
        System.out.println(course);
    }
}
